package com.ruoyi.course.service;

import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysPeriod;

import java.util.List;

/**
 * 课时管理 服务层
 * 
 * @author YJF
 */
public interface ISysPeriodService
{
    /**
     * 查询课时管理数据
     * 
     * @param period 课时信息
     * @return 课时信息集合
     */
    public List<SysPeriod> selectPeriodList(SysPeriod period);

    /**
     * 构建前端所需要树结构
     * 
     * @param periods 课时列表
     * @return 树结构列表
     */
    public List<SysPeriod> buildPeriodTree(List<SysPeriod> periods);

    /**
     * 构建前端所需要下拉树结构
     * 
     * @param periods 课时列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildPeriodTreeSelect(List<SysPeriod> periods);

    /**
     * 根据课时ID查询信息
     * 
     * @param periodId 课时ID
     * @return 课时信息
     */
    public SysPeriod selectPeriodById(Long periodId);

    /**
     * 根据ID查询所有子课时（正常状态）
     * 
     * @param periodId 课时ID
     * @return 子课时数
     */
    public int selectNormalChildrenPeriodById(Long periodId);

    /**
     * 是否存在课时子节点
     * 
     * @param periodId 课时ID
     * @return 结果
     */
    public boolean hasChildByPeriodId(Long periodId);

    /**
     * 查询课时是否存在课程
     * 
     * @param periodId 课时ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkPeriodExistCourse(Long periodId);

    /**
     * 校验课时名称是否唯一
     * 
     * @param period 课时信息
     * @return 结果
     */
    public String checkPeriodNameUnique(SysPeriod period);

    /**
     * 校验课时是否有数据权限
     * 
     * @param periodId 课时id
     */
    public void checkPeriodDataScope(Long periodId);

    /**
     * 新增保存课时信息
     * 
     * @param period 课时信息
     * @return 结果
     */
    public int insertPeriod(SysPeriod period);

    /**
     * 修改保存课时信息
     * 
     * @param period 课时信息
     * @return 结果
     */
    public int updatePeriod(SysPeriod period);

    /**
     * 删除课时管理信息
     * 
     * @param periodId 课时ID
     * @return 结果
     */
    public int deletePeriodById(Long periodId);
}
